// #include <bits/stdc++.h>
// using namespace std;
// int main()
// {
//     int n;cin>>n;
//     vector<long long> ret(n,0);
//     for(int i=0;i<n;i++)cin>>ret[i];
//     sort(ret.begin(),ret.end());
//     long long mindiff=INT_MAX;
//     for(int i=1;i<n;i++)
//     {
//         if((ret[i]-ret[i-1])<mindiff)mindiff=ret[i]-ret[i-1];
//     }
//     cout<<mindiff<<endl;
//     return 0;
// }

// #include <bits/stdc++.h>
// using namespace std;
// int n,num;
// int res=INT_MAX;
// bool isPrime(int x)
// {
//     if(x<=1)return false;
//     for(int i=2;i<=sqrt(x);i++)
//     {
//         if(x%i==0)return false;
//     }
//     return true;
// }
// void dfs(vector<int>& ret,int start,vector<bool>& use)
// {
//     if(start==n)
//     {
//         res=min(res,num);
//         return;
//     }
//     for(int i=2;i<=ret[start];i++)
//     {
//         //枚举每一个ret[i]的素因子
//         if(!use[i]&&ret[start]%i==0&&isPrime(i))
//         {
//             num+=i;
//             use[i]=true;
//             dfs(ret,start+1,use);
//             num-=i;
//             use[i]=false;
//         }
//     }
// }
// int main()
// {
//     cin>>n;
//     vector<int> ret(n,0);
//     vector<bool> use(1000,false); 
//     for(int i=0;i<n;i++)cin>>ret[i];
//     dfs(ret,0,use);
//     if(res==INT_MAX)cout<<-1<<endl;
//     else cout<<res<<endl;
//     return 0;
// }




#include <bits/stdc++.h>
using namespace std;
//贪心加二分
int main()
{
    int n;cin>>n;
    string s;cin>>s;
    vector<char> ret(n);
    int res=0;
    for(int i=0;i<n;i++)
    {
        char ch=s[i];
        if(res==0||ch>=ret[res])
        {
            ret[++res]=ch;
        }
        else
        {
            int left=1,right=res;
            while(left<right)
            {
                int mid=left+(right-left)/2;
                if(ret[mid]>ch)
                    right=mid;
                else
                    left=mid+1;
            }
            ret[left]=ch;
        }
    }
    cout<<n-res<<endl;
    return 0;
}